package com.loby.monitor.excess.local;

/**
 * 用于显示和展示的报警类型
 * 和用于计算的ExcessMode不一样
 * 零值，衡值，和超量程对计算没有意义
 */
public enum AlarmExcessMode{
    /**
     * 不报警
     */
    None(0),
    /**
     * 超上限阈值超标
     */
    UpperLimit(1),
    /**
     * 超下限阈值超标
     */
    LowerLimit(2),
    /**
     * 上下限范围内超标
     */
    Inner(4),
    /**
     * 上下限范围外超标
     */
    Outer(3),
    /**
     * 连续0值报警
     */
    ZeroValue(8),

    /**
     * 连续衡值报警
     */
    ConstantValue(16),

    /**
     * 超量程报警
     */
    OverRange(32);

    int val;

    public String getKey()
    {
        return String.valueOf(val);
    }

    public static AlarmExcessMode of(ExcessMode excessMode)
    {
        switch (excessMode.val) {
            case 1:
                return UpperLimit;
            case 2:
                return LowerLimit;
            case 4:
                return Inner;
            case 3:
                return Outer;
            case 8:
                return ZeroValue;
            case 16:
                return ConstantValue;
            case 32:
                return OverRange;
            case 0:
            default:
                return None;
        }
    }
    AlarmExcessMode(int i) {
        val = i;
    }


    @Override
    public String toString() {
        switch (val) {
            case 0:
                return "不报警";
            case 1:
                return "超上限阈值超标";
            case 2:
                return "超下限阈值超标";
            case 4:
                return "阈值范围内超标";
            case 3:
                return "阈值范围外超标";
            case 8:
                return "持续0值报警";
            case 16:
                return "持续衡值报警";
            case 32:
                return "超量程报警";
            default:
                return "未知超标模式";
        }
    }

    public boolean isExcess() {
        return val <8;
    }

    public boolean isAbnormal() {
        return val >7;
    }
}
